//MIPS Sintax: http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html
//MIPS Converter: http://www.mipshelper.com/mips-converter.php
//Código Ideone: http://ideone.com/l6xgtA
#include <stdio.h>

void PrintBinario(long codigo){
    short i;

    for (i = 31; i >= 0; --i) printf("%d", ((codigo & (1 << i)) != 0));
}

short ValorASC(char palavra[10]){
    short asc = 0, i = 0;
    
    while (palavra[i] != '\0') asc += (short) palavra[i++];

    return asc;
}

short Registrador(){
    char palavra[4];

    scanf("%s", palavra);

    switch(palavra[1]){
        case 'z': 
            return 0; //$zero
        case 't':
            if (palavra[2] <= '7') return ((short)(palavra[2] - '0') + 8);//$t0-$t7
            else return ((short)(palavra[2] - '0') + 24); //$t8-$t9
        case 's':
            if (palavra[2] == 'p') return 29;//$sp
            else return ((short)(palavra[2] - '0') + 16); //$s0-$s7
        case 'a':
            if (palavra[2] == 't') return 1; //$at
            else return ((short)(palavra[2] - '0') + 4); //$a0-$a3
        case 'v': 
            return ((short)(palavra[2] - '0') + 2); //$v0-$v1
        case 'k':
            return ((short)(palavra[2] - '0') + 26); //$k0-$k1
        case 'g':
            return 28; //$gp
        case 'f':
            return 30; //$fp
        default:
            return 31; //$ra
    }
}

long AritLogica(short valor){
    long codigo = 0;
    
    codigo |= Registrador() << 11; // registrador destino
    codigo |= Registrador() << 21; // registrador fonte1
    codigo |= Registrador() << 16; // registrador fonte2    

    switch(valor){//FUNCT
        case 297: return (codigo |= 32);//add
        case 330: return (codigo |= 34);//sub
        case 307: return (codigo |= 36);//and
        case 225: return (codigo |= 37);//or
        default:  return (codigo |= 42);//slt case 339:
    }
}

long MovBits(short valor){
    long codigo = 0;
    short bits, registrador;
    
    codigo |= Registrador() << 11; // registrador destino

    registrador = Registrador(); //rf1 == rf2

    codigo |= registrador << 21; // registrador fonte1
    codigo |= registrador << 16; // registrador fonte2

    scanf("%d", &bits); //shamt
    codigo |= bits << 6;

    //func
    if (valor == 337) codigo |= 2;//srl
    //else codigo permanece o mesmo sll
    
    return codigo;
}

long Jump(short valor){

}

long StoreLoad(short valor){
    long codigo = 0;
    short base;

    codigo |= Registrador() << 16; //registrador-destino

    scanf("%d(", &base);//base
    codigo |= base;

    codigo |= Registrador() << 21; //registrador-memoria

    if (valor == 227) return codigo |= 2348810240; //lw 35 << 26
    else return codigo |= 2885681152; //sw 43 << 26
}

long AddImed(){
    long codigo = 536870912; //2^29  == 8 << 26
    short im;

    codigo |= Registrador() << 16; //rt
    codigo |= Registrador() << 21; //rs

    scanf("%d", &im);//imediato
    codigo |= im;

    return codigo;
}

long Compara(short valor){

}

long Acao(char palavra[10]){
    short valor;

    switch(valor = ValorASC(palavra)){
        case 297: case 330: case 307: case 225: case 339://add 297, sub 330, and 307, or 225, slt 339 
            return AritLogica(valor);
        case 331: case 337: // sll 331, srl 337
            return MovBits(valor);
        /*case 106: case 331: // j 106 jal 311
            return Jump(valor);*/
        case 227: case 234: // lw 227 sw 234
            return StoreLoad(valor);
        case 402: // addi 402
            return AddImed();
        /*case 309: case 312: // bne 309 beq 312
            return Compara(valor);*/
        default:// 220 jr
            return (long)(8 | Registrador() << 21);
    }
    
}

int main(void)
{
    char palavra[10];

    while(scanf("%s", palavra) > 0){
        PrintBinario(Acao(palavra));
        putchar('\n');
    }

    return 0;
}
